home *** CD-ROM | disk | FTP | other *** search
/ BBS Toolkit / BBS Toolkit.iso / doors_2 / wwmail44.zip / USERREC.CPP < prev    next >
C/C++ Source or Header  |  1993-01-31  |  8KB  |  226 lines

  1. #include    "userrec.h"  
  2.  
  3. // set-up the stack 
  4. extern unsigned _stklen = 128000U;
  5.  
  6. extern  configrec     syscfg;         // holds info from config.dat 
  7. extern  mailu         u;              // holds mailu 
  8. extern  int           local,          // flag for local usage 
  9.                       ansi,           // flag for ansi usage 
  10.                       nowrite,        // write user files ? 
  11.                       logoff,         // should the door logoff 
  12.                       import,         // flag for import mode
  13.                       export;         // flag for export mode 
  14. static  userrec       user;           // your userrec  
  15. //===================================================================
  16. void convert_to()
  17. {
  18.         // transfers your userrec info into my mailu structure 
  19.         
  20.         strcpy(u.name, user.name);
  21.         u.screenlines     = user.screenlines;
  22.         u.sl              = user.sl;
  23.         u.dsl             = user.dsl;
  24.         u.waiting         = user.waiting;
  25.         u.age             = user.age;
  26.         u.ar              = user.ar;
  27.         u.dar             = user.dar;
  28.         u.restrict        = user.restrict;
  29.         u.msgpost         = user.msgpost;
  30.         u.posttoday       = user.posttoday;
  31.         u.daten           = user.daten;
  32.         u.gold            = user.gold;
  33.         u.postnet         = user.postnet;
  34. }
  35. //===================================================================
  36. void convert_from()
  37. {
  38.         // transfers my mailu info to your userrec structure
  39.         // BTW: WWIVMail/QWK only updates these fields, so the entire
  40.         // userrec doesn't need to be updated 
  41.         
  42.         user.waiting         = u.waiting;
  43.         user.msgpost         = u.msgpost,
  44.         user.posttoday       = u.posttoday;
  45.         user.gold            = u.gold;
  46.         user.postnet         = u.postnet;
  47. }
  48. //===================================================================
  49. void freshen_mailu_and_qscn
  50. (
  51. int *user_num
  52. )
  53. {
  54.     // reads from your userrec and updates the mailu/qsc information
  55.  
  56.     unsigned long pos;
  57.     int userfile;
  58.     char line[MAXPATH];
  59.  
  60.     // actually open the user file 
  61.     sprintf(line, "%sUSER.LST", syscfg.datadir);
  62.     userfile = open(line, O_RDWR | O_BINARY);
  63.     pos = (syscfg.userreclen * (long)*user_num);
  64.  
  65.     if (lseek(userfile, pos, SEEK_SET) != -1L) {
  66.         if (read(userfile, (void *)&user, syscfg.userreclen) > 0) {
  67.             convert_to();
  68.             Read_Qscn(*user_num);
  69.         } else
  70.             *user_num = 0;
  71.     }
  72.  
  73.     // 0 = fail upon return
  74.     close(userfile);
  75.    
  76. }
  77. //===================================================================
  78. void read_user_info(int *user_num, char *cur_baud, char *com_speed)
  79. {
  80.         // opens user file and chain.txt to get info for userrec 
  81.  
  82.         int advance;
  83.         char line[81];
  84.         FILE *chain;
  85.  
  86.         // local mode
  87.         if(local){
  88.             if (export) {
  89.                 // user_num is already set
  90.                 ansi = 1;
  91.             } else if (import) {
  92.                 *user_num = 1;
  93.                 ansi = 1;
  94.             } else {
  95.                 cout << "\n";
  96.                 cout << "Please Enter User Number:";
  97.                 gets(line);
  98.                 *user_num = (int)atoi(line);
  99.                 cout << "Do You Have Local ANSI ? (Y/N)";
  100.                 gets(line);
  101.                 // turn on/off ansi graphic output 
  102.                 if (strcmp(strupr(line),"Y") == 0)
  103.                     ansi = 1;
  104.                 else
  105.                     ansi = 0;
  106.             }
  107.             strcpy(cur_baud, "KB");
  108.             strcpy(com_speed, "0");
  109.             // remote user 
  110.         } else {
  111.             // line 1 of chain.txt has user number 
  112.             chain = fopen("chain.txt", "r");
  113.             fgets(line, 80, chain);
  114.             *user_num = (int)atoi(line);
  115.                 
  116.             // skip on down to ansi support line 
  117.             for(advance = 1; advance < 14; advance++)
  118.                 fgets(line, 80, chain);
  119.             ansi = atoi(line);
  120.  
  121.             // skip on down to current baud rate 
  122.             for(advance = 1; advance < 7; advance++)
  123.                 fgets(line, 80, chain);
  124.             strcpy(cur_baud, "");
  125.             strncat(cur_baud, line, strlen(line) - 1);
  126.  
  127.             // skip on down to current com_speed 
  128.             for(advance = 1; advance < 12; advance++)
  129.                 fgets(line, 80, chain);
  130.             strcpy(com_speed, "");
  131.             strncat(com_speed, line, strlen(line) - 1);
  132.  
  133.             fclose(chain);
  134.         }
  135.  
  136.         freshen_mailu_and_qscn(user_num); 
  137. }
  138. //===================================================================
  139. void write_user(int user_num, char *main_dir, int clean)
  140. {
  141.         // Open the user file and update the last read pointers 
  142.  
  143.         int userfile;
  144.         unsigned long pos;
  145.         char s[MAXPATH];
  146.  
  147.         cd_to(main_dir);
  148.  
  149.         // Deletes E-Mail and Updates Pointers 
  150.         print_ansi(normal);
  151.         if ((nowrite == 0) && clean)
  152.             delmail(user_num);
  153.         convert_from();
  154.  
  155.         sprintf(s, "%sUSER.LST",syscfg.datadir);
  156.         if ((userfile = open(s, O_RDWR | O_BINARY)) != -1) {
  157.             pos = (syscfg.userreclen * (long)user_num);
  158.             lseek(userfile, pos, SEEK_SET);
  159.             if (nowrite == 0)
  160.                 write(userfile, (void *)&user, syscfg.userreclen);
  161.             close(userfile);
  162.             Write_Qscn(user_num);
  163.             Read_Qscn(user_num);
  164.         }
  165.         cd_to(syscfg.tempdir);
  166.         if (logoff)
  167.             carrier_dropped(main_dir);
  168. }
  169. //===================================================================
  170. void user_ssm(int un)
  171. {
  172.         // tells a user that he/she has one more piece of
  173.         // short message to read 
  174.  
  175.         char s[80];
  176.         int userfile;
  177.         unsigned long pos;
  178.         userrec tempuser;
  179.         
  180.         sprintf(s, "%sUSER.LST", syscfg.datadir);
  181.         userfile = open(s, O_RDWR | O_BINARY);
  182.         if (userfile > 0) {
  183.             pos = (long)(syscfg.userreclen * un);
  184.             lseek(userfile, pos, SEEK_SET);
  185.             read(userfile, (void *)&tempuser, syscfg.userreclen);
  186.             if (nowrite == 0) {
  187.                 lseek(userfile, pos, SEEK_SET);
  188.                 tempuser.sysstatus |= sysstatus_smw;
  189.                 write(userfile, (void *)&tempuser, syscfg.userreclen);
  190.             }
  191.             close(userfile);
  192.         }
  193. }
  194. //===================================================================
  195. void user_import(int un)
  196. {
  197.         // tells a user (local) that he/she has one more piece of
  198.         // e-mail to read 
  199.            
  200.         char s[MAXPATH];
  201.         int userfile;
  202.         unsigned long pos;
  203.         userrec tempuser;
  204.         
  205.         sprintf(s, "%sUSER.LST", syscfg.datadir);
  206.         if ((userfile = open(s, O_RDWR | O_BINARY)) != -1) {
  207.             pos = (long)(syscfg.userreclen * un);
  208.             lseek(userfile, pos, SEEK_SET);
  209.             read(userfile, (void *)&tempuser, syscfg.userreclen);
  210.             lseek(userfile, pos, SEEK_SET);
  211.             if (nowrite == 0) {
  212.                 tempuser.waiting++;
  213.                 write(userfile, (void *)&tempuser, syscfg.userreclen);
  214.             }
  215.             close(userfile);
  216.         }
  217. }
  218. //===================================================================
  219. void main(int argc, char *argv[])
  220. {
  221.     // this is a stub for the REAL main() routine. 
  222.  
  223.     realmain(argc, argv);
  224. }
  225. //===================================================================
  226.